import { defineConfig } from 'vite'
import path from 'path'
import vue from '@vitejs/plugin-vue'
import createAutoImport from './vite/plugins/auto-import'
import { mars3dPlugin } from 'vite-plugin-mars3d'

export default defineConfig({
	base: './',
	// 插件配置
	plugins: [
		vue(),
		createAutoImport(),
		mars3dPlugin()
	],
	resolve: {
		// https://cn.vitejs.dev/config/#resolve-alias
		alias: {
			// 设置路径
			'~': path.resolve(__dirname, './'),
			// 设置别名
			'@': path.resolve(__dirname, './src'),
		},
		// https://cn.vitejs.dev/config/#resolve-extensions
		extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'],
	},
	css: {
		// 配置 css modules 的行为
		modules: {},
		// postCss 配置
		postcss: {},
		//指定传递给 css 预处理器的选项
		preprocessorOptions: {
			scss: {
				additionalData: `$injectedColor:orange;`,
			},
		},
	},
	json: {
		//是否支持从 .json 文件中进行按名导入
		namedExports: true,
		//若设置为 true 导入的json会被转为 export default JSON.parse("..") 会比转译成对象字面量性能更好
		stringify: false,
	},
	server: {
		//项目启动时自动打开浏览器
		open: true,
		// host: '0.0.0.0',
		//自定义端口
		port: 8888,
		// 是否开启 https
    https: false,
    // 允许跨域
    cors: true,
		//开启热加载
		hmr: true,
		// 服务器代理配置
		proxy: {
			'/webApi': {
				target: 'http://112.6.22.23:50049',
				changeOrigin: true,
				rewrite: path => path.replace(/^\/webApi/, ''),
			},
		},
  },
  build: {
		//浏览器兼容性  "esnext"|"modules"
		target: 'modules',
		//指定输出路径
		outDir: 'dist',
		//生成静态资源的存放路径
		assetsDir: 'assets',
		//小于此阈值的导入或引用资源将内联为 base64 编码，以避免额外的 http 请求。设置为 0 可以完全禁用此项
		assetsInlineLimit: 4096,
		modulePreload: {
			polyfill: true, // 预加载
		},
		//启用/禁用 CSS 代码拆分
		cssCodeSplit: true,
		//构建后是否生成 source map 文件
		sourcemap: false,
		minify: 'terser', //terser 构建后文件体积更小
		terserOptions: {
			compress: {
				drop_console: true, // 生产环境去除console
				drop_debugger: true, // 生产环境去除debugger
			},
		},
		rollupOptions: {
			output: {
				// 最小化拆分包
				manualChunks: {
					// 拆分代码，这个就是分包，配置完后自动按需加载，现在还比不上webpack的splitchunk，不过也能用了。
					vue: ['vue', 'vue-router'],
					elementPlus: ['element-plus'],
				},
				// 用于从入口点创建的块的打包输出格式[name]表示文件名,[hash]表示该文件内容hash值
				entryFileNames: 'js/[name].[hash].js',
				// 用于命名代码拆分时创建的共享块的输出命名
				chunkFileNames: 'js/[name].[hash].js',
				// 用于输出静态资源的命名，[ext]表示文件扩展名
				assetFileNames: '[ext]/[name].[hash].[ext]',
			},
		},
		write: true,
		//默认情况下，若 outDir 在 root 目录下，则 Vite 会在构建时清空该目录。
		emptyOutDir: true,
		//启用/禁用 brotli 压缩大小报告
		brotliSize: true,
		//chunk 大小警告的限制
		chunkSizeWarningLimit: 500,
	},
	//继承自 esbuild 转换选项，最常见的用例是自定义 JSX
	esbuild: {
		jsxFactory: 'h',
		jsxFragment: 'Fragment',
		jsxInject: `import Vue from 'vue'`,
	},
})
